package main

// import (
// 	"chatroom/common/message"
// 	"encoding/binary"
// 	"encoding/json"
// 	"fmt"
// 	"io"
// 	"net"
// )

// func readPkg(conn net.Conn) (mes message.Message, err error) {
// 	buf := make([]byte, 8096)
// 	_, err = conn.Read(buf[:4])
// 	if err != nil {
// 		return
// 	}

// 	// 根据buf[:4] 转成一个 uint32类型
// 	var pkgLen uint32
// 	pkgLen = binary.BigEndian.Uint32(buf[:4])
// 	// fmt.Printf("服务端接收到数据的长度=%d\n", pkgLen)
// 	// 根据 pkgLen 读取消息内容
// 	n, err := conn.Read(buf[:pkgLen])
// 	if n != int(pkgLen) || err != nil {
// 		return
// 	}

// 	// 反序列化
// 	// 把 pkgLen 反序列化成 -> message.Message
// 	err = json.Unmarshal(buf[:pkgLen], &mes)
// 	if err != nil {
// 		fmt.Println("json.Unmarshal err=", err)
// 		return
// 	}

// 	return
// }

// func writePkg(conn net.Conn, data []byte) (err error) {
// 	// 先发送data的长度给客户端
// 	var pkgLen uint32
// 	pkgLen = uint32(len(data))
// 	var buf [4]byte
// 	binary.BigEndian.PutUint32(buf[:4], pkgLen)

// 	// 发送长度
// 	n, err := conn.Write(buf[:4])
// 	if n != 4 || err != nil {
// 		fmt.Println("conn.Write(bytes) fail", err)
// 	}

// 	// 发送消息本身
// 	_, err = conn.Write(data)
// 	if err != nil {
// 		fmt.Println("conn write(bytes) err=", err)
// 		return
// 	}

// 	return
// }

// func serverProcessLogin(conn net.Conn, mes *message.Message) (err error) {
// 	loginReqData := mes.Data
// 	// 反序列化data
// 	var loginReqMessage message.LoginReqMessage
// 	err = json.Unmarshal([]byte(loginReqData), &loginReqMessage)
// 	if err != nil {
// 		fmt.Println("---json.Unmarshal---err", err)
// 	}

// 	// 逻辑处理
// 	var resMessage message.Message
// 	var loginResData message.LoginResMessage
// 	resMessage.MsgType = message.LoginResType
// 	if loginReqMessage.UserId == 100 && loginReqMessage.UserPwd == "123456" {
// 		loginResData.Code = 200
// 		loginResData.Msg = "登录成功"
// 		loginResData.Data = "token=abc123xxx"
// 	} else {
// 		loginResData.Code = 500
// 		loginResData.Msg = "登录失败"
// 		loginResData.Data = "token=null"
// 	}

// 	// 响应数据序列化
// 	// 序列化loginResData
// 	data, err := json.Marshal(loginResData)
// 	if err != nil {
// 		fmt.Println("---loginResData json.Marshal---err", err)
// 		return
// 	}
// 	resMessage.Data = string(data)

// 	// 序列化resMessage
// 	data, err = json.Marshal(resMessage)
// 	if err != nil {
// 		fmt.Println("---resMessage json.Marshal---err", err)
// 		return
// 	}

// 	// 发送data，我们将其封装到writePkg函数中
// 	err = writePkg(conn, data)

// 	return
// }

// func serviceProcessMes(conn net.Conn, mes *message.Message) (err error) {
// 	switch mes.MsgType {
// 	case message.RegisterReqType:
// 		// 处理注册
// 	case message.LoginReqType:
// 		// 处理登录
// 		err = serverProcessLogin(conn, mes)
// 	default:
// 		fmt.Println("消息类型不存在，无法处理...")
// 	}

// 	return
// }

// // 处理和客户端的通讯
// func process(conn net.Conn) {
// 	defer conn.Close()

// 	// 循环读取客户端发送的消息
// 	for {
// 		mes, err := readPkg(conn)

// 		if err != nil {
// 			if err == io.EOF {
// 				fmt.Println("客户端退出，服务端停止该conn处理...")
// 				return
// 			} else {
// 				fmt.Println("readPkg err=", err)
// 				return
// 			}
// 		}

// 		err = serviceProcessMes(conn, &mes)
// 		if err != nil {
// 			// 客户端退出了，服务器停止处理conn的消息
// 			return
// 		}
// 	}
// }

// // 处理和客户端的通讯
// func process2(conn net.Conn) {
// 	defer conn.Close()
// 	// 循环读取客户端过来的消息
// 	for {
// 		buf := make([]byte, 8096)
// 		fmt.Println("读取客户端发送过来的数据")
// 		n, err := conn.Read(buf[:4])
// 		if n != 4 || err != nil {
// 			fmt.Println("conn.Read err=", err)
// 			return
// 		}
// 		fmt.Println("读取到的buf=", buf[:4])
// 	}
// }

// func main() {
// 	fmt.Println("Listen on 8899")
// 	listen, err := net.Listen("tcp", "0.0.0.0:8899")
// 	if err != nil {
// 		fmt.Println("net.Listen err=", err)
// 		return
// 	}
// 	defer listen.Close()

// 	// 一旦监听成功，等待客户端连接
// 	for {
// 		fmt.Println("等待客户端来连接服务器...")
// 		conn, err := listen.Accept()
// 		if err != nil {
// 			fmt.Println("listen.Accept err=", err)
// 			return
// 		}

// 		// 一旦连接成功，则启动一个协程和客户端保持通讯
// 		go process(conn)
// 	}
// }
